#pragma once
#include <string>
#include <map>
#include "tcp_connect.h"
class  DllExport tcp_server
{
public:
	explicit tcp_server();
	~tcp_server();
	/**
	 * @brief 开启监听端口 
	 * @param ip	本地网络地址
	 * @param prot	端口
	 * @return 无
	 * @note 注意
	 * @see  
	 */
	bool open_listen(char* ip, int port);	
	/**
	 * @brief 设置网络数据回调函数 
	 * @param rdcb	回调函数	 
	 * @return 无
	 * @note 注意
	 * @see  
	 */
	void on_bytes_call(conn_read_call rdcb){ _conn_rd_cb = rdcb; }
	/**
	 * @brief 设置新连接回调函数
	 * @param newconncb	回调函数	 
	 * @return 无
	 * @note 注意 
	 * @see  
	 */
	void on_new_conn(conn_newconn_call newconncb){ _new_conncb= newconncb ;}
	/**
	 * @brief 设置连接关闭回调函数 
	 * @param closecb conn_close_call	 
	 * @return 无
	 * @note 注意
	 * @see  
	 */
	void on_conn_close(conn_close_call closecb){ _conn_closecb = closecb; }
	/**
	 * @brief 关闭服务监听 
	 * @param 形参 参数说明
	 * @param 形参 参数说明
	 * @return 无
	 * @note 注意
	 * @see  
	 */
	void close_listen();
	void process_new_connect(uv_stream_t* stream, int status);	
private:
	uv_tcp_t* _uv_tcp = nullptr;
	std::string _bind_ip;
	int _bind_port;
	conn_read_call _conn_rd_cb=nullptr;
	conn_newconn_call _new_conncb=nullptr;
	conn_close_call _conn_closecb=nullptr;
	std::map<tcp_connect*, tcp_connect*>_mp_conn;
};




